<?php
namespace App\Http\Controllers\Icon;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\QueryException;

use App\Common\File;
use App\Common\uploadFileConfig;
use App\Common\excuteState;
use App\Common\tbCommon;
use App\Models\ImageSelfM;
use App\Models\TagSelfM;
use App\Models\IconSelfM;

/**
 * 类描述 私有icon的控制类
 * @time: 下午5:13:51
 * 
 * @author : lee
 *        
 */
class iconSelfController extends Controller
{

    /**
     * 添加icon数据记录
     * 
     * @param Request $request
     * 传入数据形式见 iconController的相关接口
     */
    static public function addSelfIcon(Request $request)
    {
        try {
            $addDatas = json_decode($request->input('iconInfo'), true);
            
            
//             $addDatas= [ "icon"=> ["userid"=>9,"description"=>"user9 add","title"=>"title 9",
// 							"fashion_style"=>"fashion2","lng"=>120,"lat"=>30,"address"=>"test address"],
//         				 "image"=>[ 
//         				 			[ 
//         				 				"tag"=>	[ ["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"],
//         				 						  ["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"]
//         				 						] 
//         							],
//         							[ 
//         								"tag"=>	[ 	["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"],
//         											["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"]
//         									  	]
//         						  	],
//         						  	[
//         						  		"tag"=>	[	["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"],
//         						  				 	["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"]
//         						  				]
//         			  				 ],
//         			  				 [
//         			  				 	"tag"=>	[	["pos_x"=>0,"pos_y"=>0,"itemtype"=>"trousers","itemid"=>32,"itemlink"=>"link2"]
//         			  				 			]
//         				 			]
//         			 			]
// 					];
            
            if (count($addDatas) < 1) {
                return excuteState::inputDataError();
            }
            
            $upFileC = new uploadFileConfig();
            // 文件存储配置 信息
            $imgRoot = $upFileC->imgRootPath();
            $iconF = $upFileC->iconFolder();
            $thumbIconF = $upFileC->thumbIconFolder();
            
            // image的存储路径集合
            $imgPathArr = array();
            
            // 存储 分解后的数据
            $icnArr = array();
            $imgArr = array();
            $tagArr = array();
            // 为上传数据 定义关联关系　并分解　存储数据
            tbCommon::parasIcnInputData($addDatas, $icnArr, $imgArr, $tagArr);
            
            $imageCount = count($imgArr);
            // 上传Image
            for ($i = 0; $i < $imageCount; $i ++) {
                $imgItem = $imgArr[$i];
                // 上传 image的值
                $imgKey = $imgItem['imgFile'];
                $imgName = $imgItem['path'];
                $imgObj = $request->file($imgKey);
                $imgWidth = 0;
                $imgHeigh = 0;
                // 存储图片
                $imgFullPath = File::uploadImgFile($imgObj, $imgRoot, $iconF, $thumbIconF, $imgName, 0.5, $imgWidth, $imgHeigh);
                
                $imgArr[$i]['width'] = $imgWidth;
                $imgArr[$i]['height'] = $imgHeigh;
                
                // 存储成功
                if ($imgFullPath != null) {
                    $imgArr[$i]['path'] = $imgFullPath;
                    array_push($imgPathArr, $imgFullPath);
                    // 删除 上传image的键
                    unset($imgArr[$i]['imgFile']);
                } else { // 存储失败 删除上传的image
                    File::deltImgs($imgRoot, $imgPathArr);
                    return excuteState::saveFileError();
                }
            } // end image upload
            $icon = new IconSelfM();
            // 存储 数据 事务
            DB::beginTransaction();
            try {
                
                // 添加icon记录
                $icon->addItem($icnArr);
                // 批量 添加image记录
                ImageSelfM::addItems($imgArr);
                // 添加 image的tag记录
                TagSelfM::addItems($tagArr);
                DB::commit();
                // 返回状态
                return excuteState::OK();
            } catch (QueryException $e) {
                DB::rollBack();
                // 删除 已经上传的数据
                File::deltImgs($imgRoot, $imgPathArr);
                // 返回状态
                return excuteState::insertError();
            }
        } catch (\Exception $e) {
            return excuteState::otherError();
        }
    }


    /**
     * 依据 user的id值 加载所有私有 icon的值
     * 并 加入icon的favour和 stored 状态
     * @param bigint $userid,用户id
     */
    static public function loadSelfIcons($userid){
        try{
            $ss=IconSelfM::loadAllSelfIcons($userid);
            //var_dump($ss);
            $mainDatas=tbCommon::parseIconImgDatasSelf($ss);
            return excuteState::OKwithDatas($mainDatas);
        }catch(QueryException $e){
            return excuteState::selectError();
        }
    }

    /**
     * 删除 私自Icon及其相关记录
     * @param unknown $icnfid
     */
    static  public function deltSelfIcon($icnfid){
        DB::beginTransaction();
        try {
            // 根据Icon的fid 返回 image的id和存储路径 和 comment的id
            $imgCmtIDs=IconSelfM::getImgAndCmtIDs($icnfid);
            // 获得 imge的uuid集合
            $imgIds=$imgCmtIDs['imgids'];
            // 获取 image的path集合
            $imgPaths=$imgCmtIDs['imgpaths'];
        
            $fileConfig=new uploadFileConfig();
        
            // icon存储根目录
            $imgRootPath=$fileConfig->imgRootPath();
        
            //批量删除icon图片
            File::deltImgs($imgRootPath, $imgPaths);
        
            // 依据image的uuid 删除tag表中的记录
            TagSelfM::deltByImgIds($imgIds);
            // 依据image的uuuid 删除image记录
            ImageSelfM::deltItems($imgIds);
        
            IconSelfM::deltItembyFid($icnfid);
        
            DB::commit();
            // done scuessfully
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::deleteError();
        }
    }
    
    
    
    
    /** 
     * 发布 icon
     * @param unknown $icnfid
     */
    static public function pulishIcon($icnfid){
        DB::beginTransaction();
       try {
            // 根据Icon的fid 返回 image的id和存储路径 和 comment的id
            $imgCmtIDs=IconSelfM::getImgAndCmtIDs($icnfid);
            // 获得 imge的uuid集合
            $imgIds=$imgCmtIDs['imgids'];
            
           $imgIds2= array_map( function($itm){
                return "'".$itm."'";
            },$imgIds);
            
            // 发布 icon
            IconSelfM::publishIcon($icnfid);
            // 发布Image
            ImageSelfM::publishImg($imgIds2);
            // 发布tage
            TagSelfM::publishTag($imgIds2);
            // 依据image的uuid 删除tag表中的记录
            TagSelfM::deltByImgIds($imgIds);
            // 依据image的uuuid 删除image记录
            ImageSelfM::deltItems($imgIds);
        
            
            IconSelfM::deltItembyFid($icnfid);
        
            DB::commit();
            // done scuessfully
            return excuteState::OK();
        } catch (QueryException $e) {
           DB::rollBack();
           return excuteState::deleteError();
       }
    }
    
}

?>